<?php
/*******
 # 系统用户组模型
 # lsj 2010-11-28
*******/

class groupMod extends lib_model
{
	protected $tbl = 'sys_groups';#当前模型操作的主表
	protected $cacheFile = '';#缓存文件路径
	protected $cacheGroup = array();#缓存起来的用户组对应菜单ID

	/**
	 * 初始化
	 */
	public function _init()
	{
		$this->cacheFile = CACHE_MANAGE . DS . 'group.php';#设置缓存文件路径
		return true;
	}

	/**
	 * 是否为开发者组
	 */
	public function isDeve($id)
	{
		if('DEVE' === $this->getLevel($id)) return true;
		return false;
	}

	/**
	 * 是否为管理者组
	 */
	public function isAdmin($id)
	{
		if('ADMIN' === $this->getLevel($id)) return true;
		return false;
	}

	/**
	 * 从缓存中取用户组对应的组权限
	 */
	public function getPower($id)
	{
		if(!$id) return false;
		$this->readcacheGroup();
		if(isset($this->cacheGroup[$id])) return $this->cacheGroup[$id]['powers'];#返回对应的组权限
		return 0;#没有对应的组权限
	}
	
	/**
	 * 从缓存中取用户组对应的组级别
	 */
	public function getLevel($id)
	{
		if(!$id) return false;
		$this->readcacheGroup();
		if(isset($this->cacheGroup[$id])) return $this->cacheGroup[$id]['level'];#返回对应的组级别
		return 0;#没有对应的组级别
	}


    /**
     * 获取组的级别信息
     */
    public function getLevels()
    {
        $levels = array(
				'DEVE'=>'开发者',
				'ADMIN'=>'管理员',
				'WORK'=>'业务员'
			);

		return $levels;
    }


    /**
	 * 从缓存中取用户组对应的信息
	 */
	public function getInfo($id = 0)
	{
		$this->readcacheGroup();

		if($id && isset($this->cacheGroup[$id])) return $this->cacheGroup[$id];
		return $this->cacheGroup;
	}

	/**
	 * 从数据库获取用户组
	 */
	public function getGroup($id = 0, $sel = '*')
	{
		if(0 !== $id){
			if(is_array($id)) $id = join(',', $id);
			else $this->setLimit(1);
			$this->setId($id);
		}
		//$this->setDebug();
		return $this->setOrderBy('weight', 'DESC')->select($sel);
	}

	/**
	 * 从数据库添加用户组
	 */
	public function addGroup($group)
	{
		return $this->insert($group);
	}

	/**
	 * 从数据库修改用户组
	 */
	public function editGroup($group, $id = 0)
	{
		if($id) $this->setId($id);
		elseif(!empty($group['id'])) $this->setId($group['id']);
		if(isset($group['id'])) unset($group['id']);

		return $this->update($group);
	}

	/**
	 * 从数据库删除用户组
	 */
	public function delGroup($id)
	{
		return $this->setId($id)->delete();
	}

    /**
     * 过滤数据
     * 只对字段类型做处理，对长度不做处理，请在控制器做长度的处理
     */
    public function filterItem($item)
    {
        if(empty($item)) return array();

		if(isset($item['id'])) $item['id'] = abs(intval($item['id']));
		if(isset($item['name'])) $item['name'] = filterHtml(trim($item['name']));
		if(isset($item['powers'])) $item['powers'] = trim($item['powers']);
        else $item['powers'] = 0;
		if(isset($item['level'])) $item['level'] = trim($item['level']);
		if(isset($item['weight'])) $item['weight'] = abs(intval($item['weight']));
		if(isset($item['notes'])) $item['notes'] = filterHtml(trim($item['notes']));

		return $item;
    }

	/**
	 * 写菜单权限数组到缓存文件
	 */
	public function writeCacheGroup()
	{
		#取出数据库中所有组的菜单信息
		$result = $this->getGroup(0, 'id, name, powers, level, notes');

		$group = array();
		if($result){
			foreach($result as $key=>$val){
				$group[$val['id']] = $val;
			}
		}

		$LN = "\r\n";
		$groupStr = '<?php'.$LN;
		$groupStr .= '/*'.$LN;
		$groupStr .= '*系统用户组拥有的菜单ID们的缓存'.$LN;
		$groupStr .= '*/'.$LN;
		$groupStr .= "if(!defined('APP_HOME')) exit('Access Denied');".$LN;
		$groupStr .= 'return ' . var_export($group, true) . $LN;
		$groupStr .= '?>';
		if(file_put_contents($this->cacheFile, $groupStr)) return true;
		return false;
	}

	/**
	 * 读缓存起来的菜单权限数组
	 */
	public function readCacheGroup()
	{
		if(!file_exists($this->cacheFile)){
			$this->writeCacheGroup();
		}
		if(empty($this->cacheGroup)){
			$this->cacheGroup = require $this->cacheFile;
		}
		return $this->cacheGroup;
	}


	##############################################

	/*
	#设置用户组ID
	*/
	public function setId($d, $c = 'is')
	{
		return $this->setWhere('id', $d, $c);
	}

	/*
	#设置用户组NAME
	*/
	public function setName($d, $c = 'is')
	{
		return $this->setWhere('name', $d, $c);
	}

	/*
	#设置用户组LEVEL
	*/
	public function setLevel($d, $c = 'is')
	{
		return $this->setWhere('level', $d, $c);
	}

	/*
	#设置用户组POWERS
	*/
	public function setPowers($d, $c = 'is')
	{
		return $this->setWhere('powers', $d, $c);
	}

	/*
	#设置用户组NOTES
	*/
	public function setNotes($d, $c = 'is')
	{
		return $this->setWhere('notes', $d, $c);
	}


}


